/**
 * 
 */
package com.dragonwarriors.player;

import java.util.ArrayList;

import com.dalonedrau.watchable.Watchable;
import com.dalonedrau.watchable.Watcher;

/**
 * @author Donald
 */
public final class DWCharacter implements Watchable {
	/** the {@link DWCharacter}'s base Attack characteristic score. */
	private int					attack;
	/** flag indicating the {@link DWCharacter} has been instantiated. */
	private boolean				beenInstantiated;
	/** the {@link DWCharacter}'s base Defence characteristic score. */
	private int					defence;
	/** the {@link DWCharacter}'s base Evasion characteristic score. */
	private int					evasion;
	/** the {@link DWCharacter}'s full Attack characteristic score. */
	private int					fullAttack;
	/** the {@link DWCharacter}'s full Defence characteristic score. */
	private int					fullDefence;
	/** the {@link DWCharacter}'s full Evasion characteristic score. */
	private int					fullEvasion;
	/** the {@link DWCharacter}'s full HealthPoints characteristic score. */
	private int					fullHealthPoints;
	/** the {@link DWCharacter}'s full Intelligence characteristic score. */
	private int					fullIntelligence						= -1;
	/** the {@link DWCharacter}'s full Looks characteristic score. */
	private int					fullLooks								= -1;
	/** the {@link DWCharacter}'s full MagicalAttack characteristic score. */
	private int					fullMagicalAttack;
	/** the {@link DWCharacter}'s full MagicalDefence characteristic score. */
	private int					fullMagicalDefence;
	/** the {@link DWCharacter}'s full MagicPoints characteristic score. */
	private int					fullMagicPoints;
	/** the {@link DWCharacter}'s full MaxHealthPoints characteristic score. */
	private int					fullMaxHealthPoints						= -1;
	/** the {@link DWCharacter}'s full MaxMagicPoints characteristic score. */
	private int					fullMaxMagicPoints;
	/** the {@link DWCharacter}'s full Perception characteristic score. */
	private int					fullPerception;
	/** the {@link DWCharacter}'s full PsychicTalent characteristic score. */
	private int					fullPsychicTalent						= -1;
	/** the {@link DWCharacter}'s full Reflexes characteristic score. */
	private int					fullReflexes							= -1;
	/** the {@link DWCharacter}'s full Stealth characteristic score. */
	private int					fullStealth;
	/** the {@link DWCharacter}'s full Strength characteristic score. */
	private int					fullStrength							= -1;
	/** the {@link DWCharacter}'s gender. */
	private int					gender									= -1;
	/** the {@link DWCharacter}'s base HealthPoints characteristic score. */
	private int					healthPoints;
	/** the {@link DWCharacter}'s base Intelligence characteristic score. */
	private int					intelligence;
	/** the {@link DWCharacter}'s base Looks characteristic score. */
	private int					looks;
	/** the {@link DWCharacter}'s base MagicalAttack characteristic score. */
	private int					magicalAttack;
	/** the {@link DWCharacter}'s base MagicalDefence characteristic score. */
	private int					magicalDefence;
	/** the {@link DWCharacter}'s base MagicPoints characteristic score. */
	private int					magicPoints;
	/** the {@link DWCharacter}'s base MaxHealthPoints characteristic score. */
	private int					maxHealthPoints;
	/** the {@link DWCharacter}'s base MaxMagicPoints characteristic score. */
	private int					maxMagicPoints;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s Attack
	 * characteristic.
	 */
	private int					modAttack;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s Defence
	 * characteristic.
	 */
	private int					modDefence;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s Evasion
	 * characteristic.
	 */
	private int					modEvasion;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s HealthPoints
	 * characteristic.
	 */
	private int					modHealthPoints;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s Intelligence
	 * characteristic.
	 */
	private int					modIntelligence;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s Looks
	 * characteristic.
	 */
	private int					modLooks;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s MagicalAttack
	 * characteristic.
	 */
	private int					modMagicalAttack;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s
	 * MagicalDefence characteristic.
	 */
	private int					modMagicalDefence;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s MagicPoints
	 * characteristic.
	 */
	private int					modMagicPoints;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s
	 * MaxHealthPoints characteristic.
	 */
	private int					modMaxHealthPoints;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s
	 * MaxMagicPoints characteristic.
	 */
	private int					modMaxMagicPoints;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s Perception
	 * characteristic.
	 */
	private int					modPerception;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s PsychicTalent
	 * characteristic.
	 */
	private int					modPsychicTalent;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s Reflexes
	 * characteristic.
	 */
	private int					modReflexes;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s Stealth
	 * characteristic.
	 */
	private int					modStealth;
	/**
	 * the value of any modifications to the {@link DWCharacter}'s Strength
	 * characteristic.
	 */
	private int					modStrength;
	/** the {@link DWCharacter}'s name. */
	private char[]				name;
	/** the {@link DWCharacter}'s base Perception characteristic score. */
	private int					perception;
	/** the {@link DWCharacter}'s base Profession characteristic score. */
	private int					profession								= -1;
	/** the {@link DWCharacter}'s base PsychicTalent characteristic score. */
	private int					psychicTalent;
	/** the {@link DWCharacter}'s rank. */
	private int					rank									= 0;
	/** the {@link DWCharacter}'s base Reflexes characteristic score. */
	private int					reflexes;
	/** the {@link DWCharacter}'s skills. */
	private long				skills									= 0;
	/** the {@link DWCharacter}'s base Stealth characteristic score. */
	private int					stealth;
	/** the {@link DWCharacter}'s base Strength characteristic score. */
	private int					strength;
	/** the two subsidiary elements - available to Elementalists only. */
	private int[]				subsidiaryElementalistSpecializations	= new int[2];
	private ArrayList<Watcher>	watchers								= new ArrayList<Watcher>();
	/** the {@link DWCharacter}'s experience points. */
	private int					xp;
	/**
	 * Creates a new instance of {@link DWCharacter}.
	 */
	public DWCharacter() {}
	/**
	 * {@inheritDoc}
	 */
	@Override
	public void addWatcher(final Watcher watcher) {
		watchers.add(watcher);
	}
	/**
	 * Adjusts the {@link DWCharacter}'s experience points.
	 * @param val the amount adjusted by
	 */
	public void adjustXp(final long val) {
		xp += val;
	}
	/**
	 * Assigns a skill.
	 * @param skill the skill
	 */
	public void assignSkill(final long skill) {
		skills |= skill;
	}
	/** Clears all skills that were assigned. */
	public void clearSkills() {
		skills = 0;
	}
	/**
	 * Gets the {@link DWCharacter}'s base Attack characteristic score.
	 * @return int
	 */
	public int getAttack() {
		return attack;
	}
	/**
	 * Gets the {@link DWCharacter}'s base Defence characteristic score.
	 * @return int
	 */
	public int getDefence() {
		return defence;
	}
	/**
	 * Gets the {@link DWCharacter}'s base Evasion characteristic score.
	 * @return int
	 */
	public int getEvasion() {
		return evasion;
	}
	/**
	 * Gets the {@link DWCharacter}'s full Attack characteristic score.
	 * @return int
	 */
	public int getFullAttack() {
		return fullAttack;
	}
	/**
	 * Gets the {@link DWCharacter}'s full Defence characteristic score.
	 * @return int
	 */
	public int getFullDefence() {
		return fullDefence;
	}
	/**
	 * Gets the {@link DWCharacter}'s full Evasion characteristic score.
	 * @return int
	 */
	public int getFullEvasion() {
		return fullEvasion;
	}
	/**
	 * Gets the {@link DWCharacter}'s full HealthPoints characteristic score.
	 * @return int
	 */
	public int getFullHealthPoints() {
		return fullHealthPoints;
	}
	/**
	 * Gets the {@link DWCharacter}'s full Intelligence characteristic score.
	 * @return int
	 */
	public int getFullIntelligence() {
		return fullIntelligence;
	}
	/**
	 * Gets the {@link DWCharacter}'s full Looks characteristic score.
	 * @return int
	 */
	public int getFullLooks() {
		return fullLooks;
	}
	/**
	 * Gets the {@link DWCharacter}'s full MagicalAttack characteristic score.
	 * @return int
	 */
	public int getFullMagicalAttack() {
		return fullMagicalAttack;
	}
	/**
	 * Gets the {@link DWCharacter}'s full MagicalDefence characteristic score.
	 * @return int
	 */
	public int getFullMagicalDefence() {
		return fullMagicalDefence;
	}
	/**
	 * Gets the {@link DWCharacter}'s full MagicPoints characteristic score.
	 * @return int
	 */
	public int getFullMagicPoints() {
		return fullMagicPoints;
	}
	/**
	 * Gets the {@link DWCharacter}'s full MaxHealthPoints characteristic score.
	 * @return int
	 */
	public int getFullMaxHealthPoints() {
		return fullMaxHealthPoints;
	}
	/**
	 * Gets the {@link DWCharacter}'s full MaxMagicPoints characteristic score.
	 * @return int
	 */
	public int getFullMaxMagicPoints() {
		return fullMaxMagicPoints;
	}
	/**
	 * Gets the {@link DWCharacter}'s full Perception characteristic score.
	 * @return int
	 */
	public int getFullPerception() {
		return fullPerception;
	}
	/**
	 * Gets the {@link DWCharacter}'s full PsychicTalent characteristic score.
	 * @return int
	 */
	public int getFullPsychicTalent() {
		return fullPsychicTalent;
	}
	/**
	 * Gets the {@link DWCharacter}'s full Reflexes characteristic score.
	 * @return int
	 */
	public int getFullReflexes() {
		return fullReflexes;
	}
	/**
	 * Gets the {@link DWCharacter}'s full Stealth characteristic score.
	 * @return int
	 */
	public int getFullStealth() {
		return fullStealth;
	}
	/**
	 * Gets the {@link DWCharacter}'s full Strength characteristic score.
	 * @return int
	 */
	public int getFullStrength() {
		return fullStrength;
	}
	/**
	 * Gets the {@link DWCharacter}'s gender.
	 * @return int
	 */
	public int getGender() {
		return gender;
	}
	/**
	 * Gets the {@link DWCharacter}'s base HealthPoints characteristic score.
	 * @return int
	 */
	public int getHealthPoints() {
		return healthPoints;
	}
	/**
	 * Gets the {@link DWCharacter}'s base Intelligence characteristic score.
	 * @return int
	 */
	public int getIntelligence() {
		return intelligence;
	}
	/**
	 * Gets the {@link DWCharacter}'s base Looks characteristic score.
	 * @return int
	 */
	public int getLooks() {
		return looks;
	}
	/**
	 * Gets the {@link DWCharacter}'s base MagicalAttack characteristic score.
	 * @return int
	 */
	public int getMagicalAttack() {
		return magicalAttack;
	}
	/**
	 * Gets the {@link DWCharacter}'s base MagicalDefence characteristic score.
	 * @return int
	 */
	public int getMagicalDefence() {
		return magicalDefence;
	}
	/**
	 * Gets the {@link DWCharacter}'s base MagicPoints characteristic score.
	 * @return int
	 */
	public int getMagicPoints() {
		return magicPoints;
	}
	/**
	 * Gets the {@link DWCharacter}'s base MaxHealthPoints characteristic score.
	 * @return int
	 */
	public int getMaxHealthPoints() {
		return maxHealthPoints;
	}
	/**
	 * Gets the {@link DWCharacter}'s base MaxMagicPoints characteristic score.
	 * @return int
	 */
	public int getMaxMagicPoints() {
		return maxMagicPoints;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s Attack
	 * characteristic.
	 * @return int
	 */
	public int getModAttack() {
		return modAttack;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s Defence
	 * characteristic.
	 * @return int
	 */
	public int getModDefence() {
		return modDefence;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s Evasion
	 * characteristic.
	 * @return int
	 */
	public int getModEvasion() {
		return modEvasion;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s
	 * HealthPoints characteristic.
	 * @return int
	 */
	public int getModHealthPoints() {
		return modHealthPoints;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s
	 * Intelligence characteristic.
	 * @return int
	 */
	public int getModIntelligence() {
		return modIntelligence;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s Looks
	 * characteristic.
	 * @return int
	 */
	public int getModLooks() {
		return modLooks;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s
	 * MagicalAttack characteristic.
	 * @return int
	 */
	public int getModMagicalAttack() {
		return modMagicalAttack;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s
	 * MagicalDefence characteristic.
	 * @return int
	 */
	public int getModMagicalDefence() {
		return modMagicalDefence;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s
	 * MagicPoints characteristic.
	 * @return int
	 */
	public int getModMagicPoints() {
		return modMagicPoints;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s
	 * MaxHealthPoints characteristic.
	 * @return int
	 */
	public int getModMaxHealthPoints() {
		return modMaxHealthPoints;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s
	 * MaxMagicPoints characteristic.
	 * @return int
	 */
	public int getModMaxMagicPoints() {
		return modMaxMagicPoints;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s
	 * Perception characteristic.
	 * @return int
	 */
	public int getModPerception() {
		return modPerception;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s
	 * PsychicTalent characteristic.
	 * @return int
	 */
	public int getModPsychicTalent() {
		return modPsychicTalent;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s Reflexes
	 * characteristic.
	 * @return int
	 */
	public int getModReflexes() {
		return modReflexes;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s Stealth
	 * characteristic.
	 * @return int
	 */
	public int getModStealth() {
		return modStealth;
	}
	/**
	 * Gets the value of any modifications to the {@link DWCharacter}'s Strength
	 * characteristic.
	 * @return int
	 */
	public int getModStrength() {
		return modStrength;
	}
	/**
	 * Gets the {@link DWCharacter}'s name.
	 * @return {@link char[]}
	 */
	public char[] getName() {
		return name;
	}
	/**
	 * Gets the {@link DWCharacter}'s base Perception characteristic score.
	 * @return int
	 */
	public int getPerception() {
		return perception;
	}
	/**
	 * Gets the {@link DWCharacter}'s base Profession characteristic score.
	 * @return int
	 */
	public int getProfession() {
		return profession;
	}
	/**
	 * Gets the {@link DWCharacter}'s base PsychicTalent characteristic score.
	 * @return int
	 */
	public int getPsychicTalent() {
		return psychicTalent;
	}
	/**
	 * Gets the {@link DWCharacter}'s rank .
	 * @return int
	 */
	public int getRank() {
		return rank;
	}
	/**
	 * Gets the {@link DWCharacter}'s base Reflexes characteristic score.
	 * @return int
	 */
	public int getReflexes() {
		return reflexes;
	}
	/**
	 * Gets the {@link DWCharacter}'s base Stealth characteristic score.
	 * @return int
	 */
	public int getStealth() {
		return stealth;
	}
	/**
	 * Gets the {@link DWCharacter}'s base Strength characteristic score.
	 * @return int
	 */
	public int getStrength() {
		return strength;
	}
	/**
	 * Gets the {@link DWCharacter}'s experience points.
	 * @return int
	 */
	public int getXp() {
		return xp;
	}
	/**
	 * Gets the flag indicating the {@link DWCharacter} has been instantiated.
	 * @return boolean
	 */
	public boolean hasBeenInstantiated() {
		return beenInstantiated;
	}
	/**
	 * Determines if the {@link DWCharacter} has a specific skill.
	 * @param skill the skill
	 * @return true if the {@link DWCharacter} knows the skill; false otherwise
	 */
	public boolean hasSkill(final long skill) {
		return (skills & skill) == skill;
	}
	/**
	 * {@inheritDoc}
	 */
	@Override
	public void notifyWatchers() {
		for (int i = 0; i < watchers.size(); i++) {
			watchers.get(i).watchUpdated(this);
		}
	}
	/**
	 * Removes a skill.
	 * @param skill the skill
	 */
	public void removeFlag(final long skill) {
		skills &= ~skill;
	}
	/**
	 * {@inheritDoc}
	 */
	@Override
	public void removeWatcher(final Watcher watcher) {
		watchers.remove(watcher);
	}
	/**
	 * Sets the {@link DWCharacter}'s base Attack characteristic score.
	 * @param val the Attack characteristic score
	 */
	public void setAttack(final int val) {
		attack = val;
	}
	/**
	 * Sets the flag indicating the {@link DWCharacter} has been instantiated.
	 * @param flag the flag to set
	 */
	public void setBeenInstantiated(boolean flag) {
		beenInstantiated = flag;
	}
	/**
	 * Sets the {@link DWCharacter}'s base Defence characteristic score.
	 * @param val the Defence characteristic score
	 */
	public void setDefence(final int val) {
		defence = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base Evasion characteristic score.
	 * @param val the Evasion characteristic score
	 */
	public void setEvasion(final int val) {
		evasion = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full Attack characteristic score.
	 * @param val the full Attack characteristic score
	 */
	public void setFullAttack(final int val) {
		fullAttack = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full Defence characteristic score.
	 * @param val the full Defence characteristic score
	 */
	public void setFullDefence(final int val) {
		fullDefence = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full Evasion characteristic score.
	 * @param val the full Evasion characteristic score
	 */
	public void setFullEvasion(final int val) {
		fullEvasion = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full HealthPoints characteristic score.
	 * @param val the full HealthPoints characteristic score
	 */
	public void setFullHealthPoints(final int val) {
		fullHealthPoints = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full Intelligence characteristic score.
	 * @param val the full Intelligence characteristic score
	 */
	public void setFullIntelligence(final int val) {
		fullIntelligence = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full Looks characteristic score.
	 * @param val the full Looks characteristic score
	 */
	public void setFullLooks(final int val) {
		fullLooks = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full MagicalAttack characteristic score.
	 * @param val the full MagicalAttack characteristic score
	 */
	public void setFullMagicalAttack(final int val) {
		fullMagicalAttack = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full MagicalDefence characteristic score.
	 * @param val the full MagicalDefence characteristic score
	 */
	public void setFullMagicalDefence(final int val) {
		fullMagicalDefence = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full MagicPoints characteristic score.
	 * @param val the full MagicPoints characteristic score
	 */
	public void setFullMagicPoints(final int val) {
		fullMagicPoints = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full MaxHealthPoints characteristic score.
	 * @param val the full MaxHealthPoints characteristic score
	 */
	public void setFullMaxHealthPoints(final int val) {
		fullMaxHealthPoints = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full MaxMagicPoints characteristic score.
	 * @param val the full MaxMagicPoints characteristic score
	 */
	public void setFullMaxMagicPoints(final int val) {
		fullMaxMagicPoints = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full Perception characteristic score.
	 * @param val the full Perception characteristic score
	 */
	public void setFullPerception(final int val) {
		fullPerception = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full PsychicTalent characteristic score.
	 * @param val the full PsychicTalent characteristic score
	 */
	public void setFullPsychicTalent(final int val) {
		fullPsychicTalent = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full Reflexes characteristic score.
	 * @param val the full Reflexes characteristic score
	 */
	public void setFullReflexes(final int val) {
		fullReflexes = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full Stealth characteristic score.
	 * @param val the full Stealth characteristic score
	 */
	public void setFullStealth(final int val) {
		fullStealth = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s full Strength characteristic score.
	 * @param val the full Strength characteristic score
	 */
	public void setFullStrength(final int val) {
		fullStrength = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s gender.
	 * @param val the gender to set
	 */
	public void setGender(final int val) {
		gender = val;
		notifyWatchers();
	}
	/**
	 * Sets the {@link DWCharacter}'s base HealthPoints characteristic score.
	 * @param val the HealthPoints characteristic score
	 */
	public void setHealthPoints(final int val) {
		healthPoints = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base Intelligence characteristic score.
	 * @param val the Intelligence characteristic score
	 */
	public void setIntelligence(final int val) {
		intelligence = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base Looks characteristic score.
	 * @param val the Looks characteristic score
	 */
	public void setLooks(final int val) {
		looks = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base MagicalAttack characteristic score.
	 * @param val the MagicalAttack characteristic score
	 */
	public void setMagicalAttack(final int val) {
		magicalAttack = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base MagicalDefence characteristic score.
	 * @param val the MagicalDefence characteristic score
	 */
	public void setMagicalDefence(final int val) {
		magicalDefence = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base MagicPoints characteristic score.
	 * @param val the MagicPoints characteristic score
	 */
	public void setMagicPoints(final int val) {
		magicPoints = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base MaxHealthPoints characteristic score.
	 * @param val the MaxHealthPoints characteristic score
	 */
	public void setMaxHealthPoints(final int val) {
		maxHealthPoints = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base MaxMagicPoints characteristic score.
	 * @param val the MaxMagicPoints characteristic score
	 */
	public void setMaxMagicPoints(final int val) {
		maxMagicPoints = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s Attack
	 * characteristic.
	 * @param val the modification applied to the Attack characteristic score
	 */
	public void setModAttack(final int val) {
		modAttack = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s Defence
	 * characteristic.
	 * @param val the modification applied to the Defence characteristic score
	 */
	public void setModDefence(final int val) {
		modDefence = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s Evasion
	 * characteristic.
	 * @param val the modification applied to the Evasion characteristic score
	 */
	public void setModEvasion(final int val) {
		modEvasion = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s
	 * HealthPoints characteristic.
	 * @param val the modification applied to the HealthPoints characteristic
	 *            score
	 */
	public void setModHealthPoints(final int val) {
		modHealthPoints = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s
	 * Intelligence characteristic.
	 * @param val the modification applied to the Intelligence characteristic
	 *            score
	 */
	public void setModIntelligence(final int val) {
		modIntelligence = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s Looks
	 * characteristic.
	 * @param val the modification applied to the Looks characteristic score
	 */
	public void setModLooks(final int val) {
		modLooks = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s
	 * MagicalAttack characteristic.
	 * @param val the modification applied to the MagicalAttack characteristic
	 *            score
	 */
	public void setModMagicalAttack(final int val) {
		modMagicalAttack = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s
	 * MagicalDefence characteristic.
	 * @param val the modification applied to the MagicalDefence characteristic
	 *            score
	 */
	public void setModMagicalDefence(final int val) {
		modMagicalDefence = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s
	 * MagicPoints characteristic.
	 * @param val the modification applied to the MagicPoints characteristic
	 *            score
	 */
	public void setModMagicPoints(final int val) {
		modMagicPoints = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s
	 * MaxHealthPoints characteristic.
	 * @param val the modification applied to the MaxHealthPoints characteristic
	 *            score
	 */
	public void setModMaxHealthPoints(final int val) {
		modMaxHealthPoints = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s
	 * MaxHealthPoints characteristic.
	 * @param val the modification applied to the MaxMagicPoints characteristic
	 *            score
	 */
	public void setModMaxMagicPoints(final int val) {
		modMaxMagicPoints = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s
	 * Perception characteristic.
	 * @param val the modification applied to the Perception characteristic
	 *            score
	 */
	public void setModPerception(final int val) {
		modPerception = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s
	 * PsychicTalent characteristic.
	 * @param val the modification applied to the PsychicTalent characteristic
	 *            score
	 */
	public void setModPsychicTalent(final int val) {
		modPsychicTalent = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s Reflexes
	 * characteristic.
	 * @param val the modification applied to the Reflexes characteristic score
	 */
	public void setModReflexes(final int val) {
		modReflexes = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s Stealth
	 * characteristic.
	 * @param val the modification applied to the Stealth characteristic score
	 */
	public void setModStealth(final int val) {
		modStealth = val;
	}
	/**
	 * Sets the value of any modifications to the {@link DWCharacter}'s Strength
	 * characteristic.
	 * @param val the modification applied to the Strength characteristic score
	 */
	public void setModStrength(final int val) {
		modStrength = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s name.
	 * @param val the name to set
	 */
	public void setName(final char[] val) {
		name = val;
		notifyWatchers();
	}
	/**
	 * Sets the {@link DWCharacter}'s base Perception characteristic score.
	 * @param val the Perception characteristic score
	 */
	public void setPerception(final int val) {
		perception = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base Profession characteristic score.
	 * @param val the Profession characteristic score
	 */
	public void setProfession(final int val) {
		profession = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base PsychicTalent characteristic score.
	 * @param val the PsychicTalent characteristic score
	 */
	public void setPsychicTalent(final int val) {
		psychicTalent = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s rank.
	 * @param val the rank to set
	 */
	public void setRank(final int val) {
		rank = val;
		notifyWatchers();
	}
	/**
	 * Sets the {@link DWCharacter}'s base Reflexes characteristic score.
	 * @param val the Reflexes characteristic score
	 */
	public void setReflexes(final int val) {
		reflexes = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base Stealth characteristic score.
	 * @param val the Stealth characteristic score
	 */
	public void setStealth(final int val) {
		stealth = val;
	}
	/**
	 * Sets the {@link DWCharacter}'s base Strength characteristic score.
	 * @param val the Strength characteristic score
	 */
	public void setStrength(final int val) {
		strength = val;
	}
	/**
	 * Sets the two subsidiary elements - available to Elementalists only.
	 * @param args the list
	 */
	public void setSubsidiaryElementalistSpecializations(final int... args) {
		subsidiaryElementalistSpecializations[0] = args[0];
		subsidiaryElementalistSpecializations[1] = args[1];
	}
	/**
	 * Sets the {@link DWCharacter}'s experience points.
	 * @param val the amount to set
	 */
	public void setXp(final int val) {
		xp = val;
		notifyWatchers();
	}
}
